// 描述

// 设有一个N×M方格的棋盘(1≤N≤100,1≤M≤100)，求出该棋盘中包含有多少个正方形、多少个长方形（长方形中不包括正方形）。
// image.png
// 例如：N=2, M=3
// 正方形的个数有8个：
// 边长为1的正方形有6个；
// 边长为2的正方形有2个。
// 长方形的个数有10个：
// 2×1的长方形有4个；
// 1×2的长方形有3个；
// 3×1的长方形有2个；
// 3×2的长方形有1个。

// 输入描述

// 输入两个整数，N和M，用空格隔开。

// 输出描述

// 正方形的个数与长方形的个数，用空格隔开。

// 样例输入 1 

// 2 3
// 样例输出 1 

// 8 10

// 解题思路：
// 1. 枚举所有的矩形：左上角的点和右下角的点确定一个矩形，左上角的点可以枚举所有的点，为了能够构成矩形右下角的点行和列要比左上角的点大1
// 2. 右下角的点行和列-左上角的点的行和列，判断是否相等。相等就是正方形，不相等就是长方形
#include<bits/stdc++.h>
using namespace std;
int main(){
    int m,n,z=0,c=0;//z用来记正方形个数，c来记长方形
    cin>>n>>m;//输入
    for(int i=0;i<=n;i++){ //遍历左上角点
        for (int j=0;j<=m;j++){
            for (int k=i+1;k<=n;k++){ //遍历右下角点
                for (int l=j+1;l<=m;l++){
                    if(k-i==l-j)z++;//是正方形
                    else c++;//是长方形
                }
            }
        }
    }
    cout<<z<<" "<<c; //输出
    return 0;
}
